package com.fmboy.MXH.nav.domain.Result;

import com.fmboy.MXH.nav.domain.ErrorCode;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;

@Data
public class ResultToken<T> implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L; // 序列化版本UID

    private int status; // 状态码：200成功，0和其他数字为失败
    private String message; // 错误信息
    private T token; // 返回的令牌

    // 默认构造函数
    public ResultToken() {
        this.status = ErrorCode.SUCCESS.getCode(); // 默认为成功，使用ErrorCode中的常量
        this.message = null; // 默认消息为空
        this.token = null;
    }

    // 成功的返回，包含 token 和成功的消息
    public static <T> ResultToken<T> success(T token) {
        ResultToken<T> result = new ResultToken<>();
        result.status = ErrorCode.SUCCESS.getCode(); // 设置成功状态码，使用ErrorCode中的常量
        result.message = "操作成功"; // 更通用的成功信息
        result.token = token; // 设置 token
        return result;
    }

    // 失败的返回，包含错误信息和失败的状态码
    public static <T> ResultToken<T> error(String message, Integer statusCode) {
        ResultToken<T> result = new ResultToken<>();
        result.status = statusCode != null ? statusCode : ErrorCode.INTERNAL_ERROR.getCode(); // 设置失败状态码，默认为内部错误
        result.message = message; // 设置错误信息
        return result;
    }
}